import http from 'wechat-http'

// 定义变量保存验证码
let secret_code = ''
// 获取应用实例
const app = getApp()
Page({
  data: {
    // 验证码
    code: '',
    //手机号
    mobile: '',
    //用户是否点击获取验证码
    countDownVisible: false,
  },
  onLoad({ redirectURL }) {
    console.log('onLoad redirectURL:', redirectURL) // 打印调试信息
    //获取路径信息,因为等会要跳回来
    this.setData({ redirectURL })
  },
  //点击登录
  async submitForm() {
    if (!this.verifyMobile()) return
    if (!this.verifyCode()) return
    // 用户填写的手机号和验证码
    const { mobile, code } = this.data
    //调用网络请求
    const res = await wx.http.post('/login', { mobile, code })

    // 校验数据是否合法
    if (res.code !== 10000) {
      return wx.utils.toast('请检查验证码是否正确!')
    }
    wx.utils.toast('登录成功')

    // 调用全局封装好的方法,存储token
    app.setToken(res.data.token, res.data.refreshToken)
    //重定向到登录页面

    //因为redirectTo不能跳转到tab页面,所以要进行判断
    //如果刚才是从我的页面去的登录页
    if (this.data.redirectURL === '../my/index') {
      //就用跳转tab的方式跳过去
      wx.switchTab({
        url: this.data.redirectURL,
      })
    } else {
      //如果不是tab页面的话,跳转方式就可以用redirectTo
      wx.redirectTo({
        url: this.data.redirectURL,
      })
    }
  },

  // 验证验证码
  verifyCode() {
    // 正则校验,验证码为6位数字
    const reg = /^\d{6}$/
    //进一步验证
    const valid = reg.test(this.data.code.trim())
    //验证结果
    if (!valid) wx.utils.toast('请检查验证码是否正确')
    // 返回结果
    return valid
  },

  // 验证手机号格式
  verifyMobile() {
    // 宽松的验证规则
    const reg = /^[1][3-8][0-9]{9}$/
    // 正则验证（去除两端空格）
    const valid = reg.test(this.data.mobile.trim())
    // 验证结果提示
    if (!valid) wx.utils.toast('请填写正确的手机号码!')
    // 返回验证结果
    return valid
  },

  // 定义一个方法,用于获取手机验证码
  async getCode() {
    //先校验一下手机号格式是否正确
    if (!this.verifyMobile()) return
    // 调用接口获取验证码,同时传递请求参数,也就是手机号
    const { code, data } = await wx.http.get('/code', { mobile: this.data.mobile.trim() })
    // 验证返回结果,如果有错就提醒用户
    if (code !== 10000) return wx.utils.toast('发送失败,请稍后重试')
    wx.utils.toast('发送成功,请查收短信!')
    // 把倒计时打开
    this.setData({
      countDownVisible: true,
    })
    // 给后门token传值
    secret_code = data.code
  },

  // 把验证码复制到剪贴板
  copyCode() {
    wx.setClipboardData({ data: secret_code })
  },

  //事件处理函数 ev是事件对象
  countDownChange(ev) {
    // setData存储信息
    this.setData({
      //向timeData存储详细的事件参数
      timeData: ev.detail,
      // 通过倒计时时间决定 是否显示获取验证码这几个字
      countDownVisible: ev.detail.minutes === 1 || ev.detail.seconds > 0,
    })
  },
})
